"""
第一步：选择鼠标的行为（参数是元素对象 -element）： 通过driver.find_element找到的元素，再选择鼠标行为：
* 悬浮-移动鼠标 move_to_element() -- p1
* 点击 click() --p1
* 拖拽 drag_and_drop(element1,element2) --P1
    * 先找到element1，再找到element2，拖拽执行
第二步：执行鼠标操作行为 - perform()，鼠标操作一定要perform才会执行。

ActionChains鼠标操作的具体的使用步骤：
* 1、实例化ActionChains对象
* 2、调用你要使用的鼠标操作行为 ：
    * 可以用链式调用 - 因为每个方法返回的都是self ，可以连续调用
* 3、调用perform()去执行鼠标操作： 一定要perform才会执行。

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.treejs.cn/v3/demo/cn/exedit/drag.html')

#元素拖拽操作
ele1 = driver.find_element(By.ID,'treeDemo_2_span') # 初始元素
ele2 = driver.find_element(By.ID,'treeDemo_5_span') # 目标位置
ActionChains(driver).drag_and_drop(ele1,ele2).perform()
sleep(2)
driver.quit()
"""
# 练习  (需要听课)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
yuansu = driver.find_element(By.XPATH,"//span[@id='s-usersetting-top']")
ActionChains(driver).move_to_element(yuansu).perform()
time.sleep(2)
yuansu1 = driver.find_element(By.XPATH,"//span[text()='高级搜索']")
yuansu2 = driver.find_element(By.XPATH,"//span[text()='时间不限']")
ActionChains(driver).drag_and_drop(yuansu1,yuansu2).perform()
time.sleep(2)

# 总结
# from selenium.webdriver.common.action_chains import ActionChains
# yuansu1 = driver.find_element(By.XPATH,"//span[text()='高级搜索']")
# yuansu2 = driver.find_element(By.XPATH,"//span[text()='时间不限']")
# ActionChains(driver).drag_and_drop(yuansu1,yuansu2).perform()

# 普通点击，如果有约束条件则无法进行点击。有约束点击会失败。
# 鼠标点击，没有任务约束，任何元素都可以点击。